package co.gov.medellin.sdep.sisdep.common.enums;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * <p>
 * Enumerado construido para el manejo de los misionales SISDEP, para la definicion de los diferentes
 * paths usados en la carga de archivos.
 * </p>
 * @deprecated Contruido para uso en jdk 1.4.
 * <p>
 * Copyright (c) 2012<BR>
 * Consult-Soft S.A.<BR>
 * Created on: May 25, 2012<BR>
 * 
 * @author atabares
 * </p>
 */
public final class UploadFileEnum implements Serializable, Comparable {

	/** Serial key. */
	private static final long serialVersionUID = 892059102144132849L;
	
	/**
	 * Estados construidos al momento de la carga de la clase. El orden de aparicion determina el orden y 
	 * el codigo usado para la comparacion en el metodo compareTo.
	 */
	public static final UploadFileEnum REGULACION = new UploadFileEnum("Regulacion");
	public static final UploadFileEnum PEV = new UploadFileEnum("PEV");
	public static final UploadFileEnum OPERATIVA = new UploadFileEnum("Operativa");
	public static final UploadFileEnum GESTION = new UploadFileEnum("Gestion");
	public static final UploadFileEnum CCIALES = new UploadFileEnum("CCiales");
	
	/** Propiedad que contiene el valor del enumerado. */
	private final String enumName;
	
	/** Propiedades para el manejo de los ordinales. */
	private static int enumNextOrdinal = 0;
	private final int enumOrdinal = enumNextOrdinal++;

	/** Arreglo y lista no modificable para permitir el acceso a los valores del enumerado. */
	private static final UploadFileEnum[] enumValues = { REGULACION, PEV, OPERATIVA, GESTION, CCIALES };
	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(enumValues));
	
	
	/**
	 * Constructor privado, previene la creacion de instancias por fuera de la clase.
	 */
	private UploadFileEnum(String enumNameParam) {
		enumName = enumNameParam;
	}
	
	/**
	 * Obtiene el valor del enumerado.
	 * @see UploadFileEnum#enumName
	 *
	 * @return La propiedad enumName.
	 */
	public String toString() {
		return enumName;
	}

	/**
	 * Analiza el texto del parametro dentro de un elemento del enumerado.
	 * 
	 * @param enumText Toma uno de los valores de los nombres del enumerado.
	 * @see UploadFileEnum#enumName
	 */
	public static UploadFileEnum valueOf(String enumText) {
		Iterator iter = VALUES.iterator();
		
		while (iter.hasNext()) {
			UploadFileEnum moduloStatusEnum = (UploadFileEnum) iter.next();
			
			if (enumText.equals(moduloStatusEnum.toString())) {
				return moduloStatusEnum;
			}
		}
		
		// this method is unusual in that IllegalArgumentException is
		// possibly thrown not at its beginning, but at its end.
		throw new IllegalArgumentException(
				"El texto no puede verse como un elemento ModuloStatusEnum : '" + enumText + "'");
	}
	
	/**
	 * Realiza la comparacion de los elementos del enumerado sobreescribiendo el metodo de la clase implementada.
	 * 
	 * @param o Objeto de la comparacion.
	 */
	public int compareTo(Object o) {
		return enumOrdinal - ((UploadFileEnum) o).enumOrdinal;
	}
}